using System;
using System.Data;
using System.ComponentModel;
using System.Reflection;
using System.Collections.Generic;
using DataObject.Helpers;

namespace DataObject.Model
{
	[Serializable]
	public class PaymentBatchDTO : DTOBase
	{
        public PaymentBatchDTO()
        {
            PaymentBatchID = Helper.NewSeqGuid();
            ModifiedDate = DateTime.Now;
        }

        #region Property DepositFlag

        public bool DepositFlag
        {
            get;
            set;
        }

        #endregion

		#region Reference property Members


		#endregion

		#region Collection Members

		private IList<PaymentBatchDetailDTO> _paymentBatchDetailCollection = new List<PaymentBatchDetailDTO>();
		public IList<PaymentBatchDetailDTO> PaymentBatchDetailCollection
		{
			get
			{
				return _paymentBatchDetailCollection;
			}
			set
			{
				if (_paymentBatchDetailCollection != value)
				{
					_paymentBatchDetailCollection = value;
					OnChanged();
				}
			}
		}
		private IList<ReservationPaymentDTO> _reservationPaymentCollection = new List<ReservationPaymentDTO>();
		public IList<ReservationPaymentDTO> ReservationPaymentCollection
		{
			get
			{
				return _reservationPaymentCollection;
			}
			set
			{
				if (_reservationPaymentCollection != value)
				{
					_reservationPaymentCollection = value;
					OnChanged();
				}
			}
		}

		#endregion

		#region Property ModifiedBy

		private string _modifiedBy;

		/// <summary>
		///  Property ModifiedBy
		/// <summary>
		public string ModifiedBy
		{
			get
			{
				return _modifiedBy;
			}

			set
			{
				if (_modifiedBy != value)
				{
					this.OnModifiedByChanging(value);
					_modifiedBy = value;
					this.OnModifiedByChanged();
				}
			}
		}

		#endregion

		#region Property ModifiedDate

		private DateTime? _modifiedDate;

		/// <summary>
		///  Property ModifiedDate
		/// <summary>
		public DateTime? ModifiedDate
		{
			get
			{
				return _modifiedDate;
			}

			set
			{
				if (_modifiedDate != value)
				{
					this.OnModifiedDateChanging(value);
					_modifiedDate = value;
					this.OnModifiedDateChanged();
				}
			}
		}

		#endregion

		#region Property PaidAmount

		private decimal _paidAmount;

		/// <summary>
		///  Property PaidAmount
		/// <summary>
		public decimal PaidAmount
		{
			get
			{
				return _paidAmount;
			}

			set
			{
				if (_paidAmount != value)
				{
					this.OnPaidAmountChanging(value);
					_paidAmount = value;
					this.OnPaidAmountChanged();
					OnChanged();
				}
			}
		}

		#endregion

        #region Property PaidFee

        private decimal _paidFee;

        /// <summary>
        ///  Property PaidFee
        /// <summary>
        public decimal PaidFee
        {
            get
            {
                return _paidFee;
            }

            set
            {
                if (_paidFee != value)
                {
                    this.OnPaidFeeChanging(value);
                    _paidFee = value;
                    this.OnPaidFeeChanged();
                    OnChanged();
                }
            }
        }

        #endregion

		#region Property PaymentBatchID

		private Guid _paymentBatchID;

		/// <summary>
		///  Property PaymentBatchID
		/// <summary>
		public Guid PaymentBatchID
		{
			get
			{
				return _paymentBatchID;
			}

			set
			{
				if (_paymentBatchID != value)
				{
					this.OnPaymentBatchIDChanging(value);
					_paymentBatchID = value;
					this.OnPaymentBatchIDChanged();
					OnChanged();
				}
			}
		}

		#endregion

		#region Property PaymentDate

		private DateTime _paymentDate;

		/// <summary>
		///  Property PaymentDate
		/// <summary>
		public DateTime PaymentDate
		{
			get
			{
				return _paymentDate;
			}

			set
			{
				if (_paymentDate != value)
				{
					this.OnPaymentDateChanging(value);
					_paymentDate = value;
					this.OnPaymentDateChanged();
					OnChanged();
				}
			}
		}

		#endregion

		#region Extensibility Method Declarations

		protected virtual void OnModifiedByChanging(string modifiedBy) { }
		protected virtual void OnModifiedByChanged() { }
		protected virtual void OnModifiedDateChanging(DateTime? modifiedDate) { }
		protected virtual void OnModifiedDateChanged() { }
        protected virtual void OnPaidAmountChanging(decimal paidAmount) { }
        protected virtual void OnPaidAmountChanged() { }
        protected virtual void OnPaidFeeChanging(decimal paidFee) { }
        protected virtual void OnPaidFeeChanged() { }
        protected virtual void OnDepositFlagChanging(bool depositFlag) { }
        protected virtual void OnDepositFlagChanged() { }
        protected virtual void OnPaymentBatchIDChanging(Guid paymentBatchID) { }
		protected virtual void OnPaymentBatchIDChanged() { }
		protected virtual void OnPaymentDateChanging(DateTime paymentDate) { }
		protected virtual void OnPaymentDateChanged() { }

		#endregion

	}
}
